#ifndef __M_LOGGER_H__
#define __M_LOGGER_H__
#include<stdio.h>
#include<time.h>

#define INF 0
#define DBG 1
#define ERR 2
#define DEFAULT_LOG_LEVEL INF
//获得时间戳，将时间戳转换为一个时间结构，按照一定的格式放在指定空间中
#define LOG(level,format,...) do{\
    if(DEFAULT_LOG_LEVEL>level) break;\
    time_t t=time(NULL);\
    struct tm* lt=localtime(&t);\
    char buff[32]={0};\
    strftime(buff,31,"%H:%M:%S",lt);\
    fprintf(stdout,"[%s %s:%d] " format "\n",buff,__FILE__,__LINE__, ##__VA_ARGS__);\
}while(0)
//使用 do-while(0) 结构, 将多条语句组合成一个代码块，确保宏在展开时能够像一条语句一样使用
//##__VA_ARGS__是可变参数列表的占位符，## 用于处理可变参数为空的情况
#define ILOG(format,...) LOG(INF,format,##__VA_ARGS__)
#define DLOG(format,...) LOG(DBG,format,##__VA_ARGS__)
#define ELOG(format,...) LOG(ERR,format,##__VA_ARGS__)


#endif